{
--------------------------------------------------------------------------
 PROGRAMA          : IPPRMT044
 OBJETIVO          : Programa Captura Documento Otros Movimientos de
                     Inventario de Producto Terminados.
 PROGRAMADOR       : Juan Soto.
 FECHA REALIZACION : AGOSTO  1997.  
 ASESOR            : JOSE ALFREDO PAULINO ALEJO
 MODIFICADO POR    : VICTOR GOMEZ C.
 OBJETIVO          : ACTUALIZAR EL ARCHIVO DE MONITOREO DE LAS ORDENES DE PRODUCCION
 FECHA             : Saturday, 03 March, 2001 11:01:36 AM 
--------------------------------------------------------------------------
}

GLOBALS
  "ipprgb000.4gl"

  DEFINE selec_pt CHAR(1000)
  DEFINE num_row,cuenta1,cuenta,ordenx INTEGER 
  DEFINE cant_ant ARRAY[50] OF INTEGER
  DEFINE factor_conv ARRAY[200] OF DECIMAL(12,5)
  DEFINE status_mo,ac_cli,opc4 CHAR(1)
  DEFINE usuario CHAR(9)
  DEFINE descrip_mov CHAR(30)
  DEFINE canti34 LIKE iptb00006.cantidad_2
  DEFINE prtb09 RECORD LIKE prtb00009.*
  DEFINE busca_v RECORD
     sec_cliente    INTEGER,
     nombre         CHAR(30)
  END RECORD
  DEFINE busca_p RECORD
    cod_n          INTEGER,
    cod_grupo      INTEGER,
    cod_tipo       INTEGER,
    cod_sec        INTEGER,
    descrip_esp    CHAR(30),
    unidad_med     CHAR(5)
  END RECORD

FUNCTION ipprmt044()
  DEFINE fecha CHAR(8)
  DEFINE hora CHAR(5)

  CLEAR SCREEN
  OPTIONS
    ERROR LINE 24,
    FORM LINE 4,
    COMMENT LINE 22,
    PROMPT LINE 23
    LET fecha = today  USING "dd/mm/yyyy"
    LET hora = time
    LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
    DISPLAY p_companias.nombre CLIPPED AT 1,lj
            ATTRIBUTE (REVERSE,BLUE)
    DISPLAY fecha AT 1,70 ATTRIBUTE (BLUE)
    DISPLAY hora AT 2,73 ATTRIBUTE (BLUE)
    DISPLAY "ipprmt044" AT 1,3 ATTRIBUTE (BLUE)
    DISPLAY "Otros Movimientos" AT 2,30
    DISPLAY "<Esc> Adiciona Registro"  AT 3,2 ATTRIBUTE (BLUE,REVERSE)
    DISPLAY "<Delete> Cancela Operacion" AT 3,54 ATTRIBUTE (BLUE,REVERSE)
    OPEN FORM ipfmmt044 FROM "ipfmmt044" 
    DISPLAY FORM ipfmmt044
   
   CALL ipprad44()
  END FUNCTION

FUNCTION ipprad44()
  DEFINE cajas ARRAY[200] OF INTEGER
# WHENEVER ERROR CONTINUE
   LET int_flag = FALSE
  INITIALIZE otros_mov.* TO NULL

 LABEL otra_vez:
 LABEL vuelve:
    IF (OPC = "S" OR OPC = "s") OR opc is null THEN
     INITIALIZE otros_mov.* TO NULL
  END IF


  IF otros_mov.num_doc is null THEN
    LET otros_mov.num_doc = 0
  END IF

 LET p_fechas = otros_mov.fecha USING "dd/mm/yyyy"

  CALL prd()
  IF bandera = 1 THEN
     LET bandera = 0
     RETURN
  END IF
 
 INPUT BY NAME otros_mov.* WITHOUT DEFAULTS
  ON KEY(CONTROL-W)
     IF INFIELD(cod_sp_sec) OR INFIELD(cod_sp) THEN
        CALL busca_cliente()
        LET otros_mov.cod_sp      = clientes[idx].tipo_cliente
        LET otros_mov.cod_sp_sec  = clientes[idx].sec_cliente
        LET otros_mov.descrip4     = clientes[idx].nombre

        DISPLAY BY NAME otros_mov.cod_sp,
                        otros_mov.cod_sp_sec, 
                        otros_mov.descrip4
        EXIT INPUT
      END IF
  AFTER FIELD cod_cia
    IF otros_mov.cod_cia IS NULL THEN
       LET numero_msg = 16
       CALL msg(numero_msg)
       NEXT FIELD cod_cia
     END IF

     IF otros_mov.cod_cia = 1 THEN
       LET nombre_cia = "MARMOTECH"
     ELSE  
       LET nombre_cia = ""
     END IF
     DISPLAY BY NAME nombre_cia

  BEFORE FIELD bodega
   LET otros_mov.bodega = 1
   DISPLAY BY NAME otros_mov.bodega

  AFTER FIELD fecha
    IF otros_mov.fecha > TODAY THEN
       LET numero_msg = 189
       CALL msg(numero_msg)
       NEXT FIELD fecha
    END IF

    LET p_fechas = otros_mov.fecha using "dd/mm/yyyy"
 
    CALL prd()  
    LET otros_mov.fecha = p_fechas
    DISPLAY BY NAME otros_mov.fecha
    IF bandera = 1 THEN
      LET bandera = 0
      NEXT FIELD fecha
   END IF
 
   AFTER FIELD fact_no
     LET otros_mov.cod_sp = null
     LET otros_mov.cod_sp_sec = null

     IF otros_mov.cod_mov = 12 THEN
        IF otros_mov.fact_no is null THEN
           LET numero_msg = 16 
           CALL msg(numero_msg)
          #NEXT FIELD fact_no
        END IF
     END IF

     IF otros_mov.fact_no is not null THEN
        IF otros_mov.cod_mov = 32 THEN
 
           SELECT unique cod_n FROM iptb00006 
           WHERE fact_no = otros_mov.fact_no and cod_mov = otros_mov.cod_mov and
                 fecha >= "010194" AND status_t is null
        
          IF status != NOTFOUND THEN
             LET numero_msg = 103
             CALL msg(numero_msg)
            #NEXT FIELD fact_no
          END IF
       END IF
   ELSE
     IF otros_mov.cod_mov = 12  THEN
        SELECT UNIQUE tipo_cliente,sec_cliente 
        INTO otros_mov.cod_sp,otros_mov.cod_sp_sec
        FROM vetb00002 WHERE factura=otros_mov.fact_no and status_t is null AND
                             fecha_factura >= "010194"

        IF status = NOTFOUND THEN
           LET numero_msg = 102 
           CALL msg(numero_msg)
          #NEXT FIELD fact_no
        END IF
     END IF
  END IF 

       DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec

 AFTER FIELD cod_transp
     IF otros_mov.cod_transp is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        #NEXT FIELD cod_transp
     END IF

    AFTER FIELD sec_transp
     IF otros_mov.sec_transp is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        #NEXT FIELD cod_transp
     END IF
     SELECT nombre INTO descrip2 FROM vetb00015
     WHERE cod_transp=otros_mov.cod_transp and 
           sec_transp=otros_mov.sec_transp and
          status_t is null

     IF status = NOTFOUND THEN
        LET numero_msg = 3
        CALL msg(numero_msg)
      # NEXT FIELD cod_transp
     END IF
   DISPLAY BY NAME descrip2

   AFTER FIELD cod_tarifa
     IF otros_mov.cod_tarifa is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
     #  NEXT FIELD cod_tarifa
     END IF
     SELECT descrip INTO descrip1 FROM vetb00023
     WHERE cod_tarifa = otros_mov.cod_tarifa and status_t is null

     IF status = NOTFOUND THEN
        LET numero_msg = 3
        CALL msg(numero_msg)
       #NEXT FIELD cod_tarifa
     END IF
     DISPLAY BY NAME descrip1

   AFTER FIELD bodega
     SELECT *FROM intb00009 WHERE cod_bodega = otros_mov.bodega
      IF status >= 0 THEN
        IF status = NOTFOUND THEN
         LET numero_msg = 3
         CALL msg(numero_msg)
         NEXT FIELD bodega
      END IF
        ELSE
            CALL integridad()
   
            IF bandera = 1 THEN
               LET bandera = 0
               RETURN
            END IF 
   END IF

  BEFORE FIELD num_doc

    LET otros_mov.fecha = today
    DISPLAY BY NAME otros_mov.fecha

   AFTER FIELD cod_mov

     IF (otros_mov.cod_mov IS NULL OR otros_mov.cod_mov = 30 OR 
         otros_mov.cod_mov = 31) THEN
        LET numero_msg = 1660
        CALL msg(numero_msg)
        NEXT FIELD cod_mov
     END IF
     SELECT a.descrip_mov,a.status_mov INTO otros_mov.descrip_mov,status_m
     FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t is null

      IF status >= 0 THEN
        IF STATUS = NOTFOUND THEN
           LET numero_msg = 3
           CALL msg(numero_msg)
           NEXT FIELD cod_mov
        END IF
        ELSE
          CALL integridad()

         if bandera = 1 THEN
           LET bandera = 0
           RETURN
       end if 
        END IF

    DISPLAY BY NAME otros_mov.descrip_mov
{ CHEQUEO DE PERMISOS PARA EL USUARIO
    SELECT * FROM iptb00005 where cod_mov = otros_mov.cod_mov and
                                   us_crea = user

        IF status = notfound THEN
           LET numero_msg = 139
           CALL msg(numero_msg)
           NEXT FIELD cod_mov
         END IF
}
    IF otros_mov.cod_mov = 32 or 
       otros_mov.cod_mov = 12 
        THEN
      NEXT FIELD fact_no
    ELSE
      NEXT FIELD fecha
    END IF

  AFTER FIELD conduce_no
   IF otros_mov.cod_mov = 20 THEN
      IF otros_mov.conduce_no IS NULL THEN
         LET numero_msg = 1662
         CALL msg(numero_msg)
         NEXT FIELD conduce_no
      ELSE  
         LET ordenx = otros_mov.conduce_no
         SELECT * FROM prtb00012 #-> Valida si la orden digitada existe vg.  
          WHERE num_oc = ordenx
            AND status_t IS NULL
         
         IF STATUS = NOTFOUND THEN
            LET numero_msg = 85
            CALL msg(numero_msg)
            NEXT FIELD conduce_no
         END IF
      END IF
   END IF

  BEFORE FIELD cod_sp
   IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
      CALL busca_vend()
      LET otros_mov.cod_sp    = 12
      LET otros_mov.cod_sp_sec= busca_v.sec_cliente
      LET otros_mov.descrip4  = busca_v.nombre     
      DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4
      NEXT FIELD cod_sp_sec
   END IF

  AFTER FIELD cod_sp 
   IF ac_cli = "S" AND otros_mov.cod_sp IS NULL THEN
      LET numero_msg = 16
      CALL msg(numero_msg)
      NEXT FIELD cod_sp
   END IF

  AFTER FIELD cod_sp_sec 
  IF ac_cli = "S" AND otros_mov.cod_sp_sec IS NULL THEN
     LET numero_msg = 16
     CALL msg(numero_msg)
     NEXT FIELD cod_sp
  END IF

  IF otros_mov.cod_mov = 12 THEN
     IF otros_mov.cod_sp_sec is null THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD cod_sp
      END IF
   END IF
 
   IF otros_mov.cod_sp_sec is not null THEN
      SELECT nombre INTO otros_mov.descrip4 FROM vetb00004
      WHERE tipo_cliente = otros_mov.cod_sp and
            sec_cliente = otros_mov.cod_sp_sec and
            status_t is null

            IF status = notfound THEN
               LET numero_msg = 3
               CALL msg(numero_msg)
               NEXT FIELD cod_sp
            END IF

     DISPLAY BY NAME otros_mov.descrip4 

     IF otros_mov.fact_no is not null THEN
        SELECT sec_cliente FROM vetb00002
        WHERE factura = otros_mov.fact_no and
              sec_cliente = otros_mov.cod_sp_sec

        IF status = notfound THEN
           LET numero_msg = 237
           CALL msg(numero_msg)
           NEXT FIELD cod_sp_sec
        END IF
     END IF
     END IF
   IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
     
 SELECT unique sec_cliente FROM vetb00033
     WHERE sec_cliente = otros_mov.cod_sp_sec

     IF STATUS = NOTFOUND THEN
        LET numero_msg = -1301
        CALL msg(numero_msg)
        NEXT FIELD cod_sp
     END IF
   END IF

 END INPUT
  
    IF int_flag THEN
       LET numero_msg = 2
       CALL msg(numero_msg)
       LET int_flag = FALSE

       FOR idx = 1 to arr_count()
           LET movi2[idx].cod_n = null
           LET movi2[idx].cod_grupo = null
           LET movi2[idx].cod_tipo = null
           LET movi2[idx].cod_sec = null
           LET movi2[idx].cantidad_1 = null
           LET movi2[idx].cantidad_2 = null
           LET movi2[idx].unidad_med = null
           LET movi2[idx].descrip_esp = null
       END FOR
       SLEEP 1
       RETURN
    END IF

    IF opc = "S" or opc = "s" OR opc IS NULL THEN
       FOR idx = 1 to arr_count()
           LET movi2[idx].cod_n = null
           LET movi2[idx].cod_grupo = null
           LET movi2[idx].cod_tipo = null
           LET movi2[idx].cod_sec = null
           LET movi2[idx].cantidad_2 = null
           LET movi2[idx].cantidad_1 = null
           LET movi2[idx].unidad_med = null
           LET movi2[idx].descrip_esp = null
       END FOR
    END IF
    INITIALIZE ant_art.* TO NULL

    IF status_m = "S" THEN
     PREPARE b_fact FROM selec2
     DECLARE facturas CURSOR FOR b_fact
     OPEN facturas USING otros_mov.fact_no

     LET idx = 1
     FOREACH facturas INTO movi2[idx].*,cajas[idx],cant_ant[idx]
           IF status = notfound THEN
             EXIT FOREACH
           END IF
      LET idx = idx + 1
     END FOREACH

     END IF


     LET decide = null

     CALL set_count(idx - 1)
     INPUT ARRAY movi2 WITHOUT DEFAULTS FROM s_movi1.*  

# Este BEFORE FIELD estaba en comentario por disposicion de alguien hace algun
# tiempo y ahora no se sabe porque se determino que cuando usted hace una
# devolucion le permita al usuario modificar el codigo del producto
 
# Hoy 13 de noviembre de 1993 el Ing. de informatica dispuso que
# cuando sea una devolucion a una factura no se permitiera la actualizacion
# del codigo del producto 

      BEFORE ROW
       LET p_act = arr_curr()
       LET scr_l = scr_line()

       ON KEY(CONTROL-W)
        CASE
          WHEN INFIELD (cod_n)
          CALL busca_prod1()

          LET movi2[p_act].cod_n      = busca_p.cod_n
          LET movi2[p_act].cod_grupo  = busca_p.cod_grupo
          LET movi2[p_act].cod_tipo   = busca_p.cod_tipo
          LET movi2[p_act].cod_sec    = busca_p.cod_sec
          LET movi2[p_act].descrip_esp= busca_p.descrip_esp
          LET movi2[p_act].unidad_med = busca_p.unidad_med

          DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
                  movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
                  movi2[p_act].descrip_esp,movi2[p_act].unidad_med
          TO      s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo,
                  s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec,
                  s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med
          
          WHEN INFIELD (cod_grupo)
          CALL busca_prod1()

          LET movi2[p_act].cod_n      = busca_p.cod_n
          LET movi2[p_act].cod_grupo  = busca_p.cod_grupo
          LET movi2[p_act].cod_tipo   = busca_p.cod_tipo
          LET movi2[p_act].cod_sec    = busca_p.cod_sec
          LET movi2[p_act].descrip_esp= busca_p.descrip_esp
          LET movi2[p_act].unidad_med = busca_p.unidad_med

          DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
                  movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
                  movi2[p_act].descrip_esp,movi2[p_act].unidad_med
          TO      s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo,
                  s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec,
                  s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med
          
          WHEN INFIELD (cod_tipo)
          CALL busca_prod1()

          LET movi2[p_act].cod_n      = busca_p.cod_n
          LET movi2[p_act].cod_grupo  = busca_p.cod_grupo
          LET movi2[p_act].cod_tipo   = busca_p.cod_tipo
          LET movi2[p_act].cod_sec    = busca_p.cod_sec
          LET movi2[p_act].descrip_esp= busca_p.descrip_esp
          LET movi2[p_act].unidad_med = busca_p.unidad_med

          DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
                  movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
                  movi2[p_act].descrip_esp,movi2[p_act].unidad_med
          TO      s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo,
                  s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec,
                  s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med
          
          WHEN INFIELD (cod_sec)
          CALL busca_prod1()

          LET movi2[p_act].cod_n      = busca_p.cod_n
          LET movi2[p_act].cod_grupo  = busca_p.cod_grupo
          LET movi2[p_act].cod_tipo   = busca_p.cod_tipo
          LET movi2[p_act].cod_sec    = busca_p.cod_sec
          LET movi2[p_act].descrip_esp= busca_p.descrip_esp
          LET movi2[p_act].unidad_med = busca_p.unidad_med

          DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
                  movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
                  movi2[p_act].descrip_esp,movi2[p_act].unidad_med
          TO      s_movi1[p_act].cod_n, s_movi1[p_act].cod_grupo,
                  s_movi1[p_act].cod_tipo,s_movi1[p_act].cod_sec,
                  s_movi1[p_act].descrip_esp,s_movi1[p_act].unidad_med
          
       END CASE
       CALL integridad()
       if bandera = 1 THEN
          LET bandera = 0
          RETURN
       end if 


     AFTER ROW
    LET p_act = arr_curr()
    IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
     movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then

               LET ant_art.cod_n = movi2[p_act].cod_n
               LET ant_art.cod_grupo = movi2[p_act].cod_grupo 
               LET ant_art.cod_tipo = movi2[p_act].cod_tipo 
               LET ant_art.cod_sec = movi2[p_act].cod_sec   

                  FOR idx = 1 TO arr_count()
                   IF idx != p_act THEN
                      IF movi2[idx].cod_n = ant_art.cod_n AND
                         movi2[idx].cod_grupo = ant_art.cod_grupo AND 
                         movi2[idx].cod_tipo = ant_art.cod_tipo AND
                         movi2[idx].cod_sec = ant_art.cod_sec THEN 
                         LET numero_msg = 21
                         CALL msg(numero_msg)
                         LET p_act = p_act - 1
                         NEXT FIELD cod_n
                      END IF
                    END IF
                  END FOR
               END IF
               
     AFTER FIELD cod_n
      LET p_act = arr_curr()
      IF movi2[p_act].cod_n is not null then

               LET ant_art.cod_n = movi2[p_act].cod_n
               LET ant_art.cod_grupo = movi2[p_act].cod_grupo 
               LET ant_art.cod_tipo = movi2[p_act].cod_tipo 
               LET ant_art.cod_sec = movi2[p_act].cod_sec   

                  FOR idx = 1 TO arr_count()
                   IF idx != p_act THEN
                      IF movi2[idx].cod_n = ant_art.cod_n AND
                         movi2[idx].cod_grupo = ant_art.cod_grupo AND 
                         movi2[idx].cod_tipo = ant_art.cod_tipo AND
                         movi2[idx].cod_sec = ant_art.cod_sec THEN 
                         LET p_act = p_act - 1
                         NEXT FIELD cod_grupo 
                      END IF
                    END IF
                  END FOR
             END IF


  AFTER FIELD cod_grupo
     LET p_act = arr_curr()
     IF movi2[p_act].cod_grupo is null THEN
       LET numero_msg = 16 
       CALL msg(numero_msg)
       NEXT FIELD cod_n     
     END IF

               LET ant_art.cod_n = movi2[p_act].cod_n
               LET ant_art.cod_grupo = movi2[p_act].cod_grupo 
               LET ant_art.cod_tipo = movi2[p_act].cod_tipo 
               LET ant_art.cod_sec = movi2[p_act].cod_sec   

                  FOR idx = 1 TO arr_count()
                   IF idx != p_act THEN
                      IF movi2[idx].cod_n = ant_art.cod_n AND
                         movi2[idx].cod_grupo = ant_art.cod_grupo AND 
                         movi2[idx].cod_tipo = ant_art.cod_tipo AND
                         movi2[idx].cod_sec = ant_art.cod_sec THEN 
                         LET p_act = p_act - 1
                         NEXT FIELD cod_tipo
                      END IF
                    END IF
                  END FOR

   AFTER FIELD cod_tipo
     LET p_act = arr_curr()
     IF movi2[p_act].cod_tipo  is null THEN
       LET numero_msg = 16 
       CALL msg(numero_msg)
       NEXT FIELD cod_n   
     END IF

               LET ant_art.cod_n = movi2[p_act].cod_n
               LET ant_art.cod_grupo = movi2[p_act].cod_grupo 
               LET ant_art.cod_tipo = movi2[p_act].cod_tipo 
               LET ant_art.cod_sec = movi2[p_act].cod_sec   

                  FOR idx = 1 TO arr_count()
                   IF idx != p_act THEN
                      IF movi2[idx].cod_n = ant_art.cod_n AND
                         movi2[idx].cod_grupo = ant_art.cod_grupo AND 
                         movi2[idx].cod_tipo = ant_art.cod_tipo AND
                         movi2[idx].cod_sec = ant_art.cod_sec THEN 
                         LET p_act = p_act - 1
                         NEXT FIELD cod_sec 
                      END IF
                    END IF
                  END FOR

     AFTER FIELD cod_sec
     LET p_act = arr_curr()
     IF movi2[p_act].cod_sec is null THEN
       LET numero_msg = 16 
       CALL msg(numero_msg)
       NEXT FIELD cod_n  
     END IF

     IF movi2[p_act].cod_n is null AND movi2[p_act].cod_sec is not null THEN
         LET numero_msg = 16
         CALL msg(numero_msg)
         NEXT FIELD cod_n
     END IF

    IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
     movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then


  SELECT * INTO p_iptb02.* FROM iptb00002
  WHERE cod_n=movi2[p_act].cod_n and cod_grupo = movi2[p_act].cod_grupo and 
        cod_tipo=movi2[p_act].cod_tipo and cod_sec  = movi2[p_act].cod_sec and 
        status_t is null
                                 
  IF STATUS = NOTFOUND THEN
     LET numero_msg = 3
     CALL msg(numero_msg)
     NEXT FIELD cod_n
  END IF

  SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a
  WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo 
    and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec
    and a.status_t IS NULL
     
  IF STATUS = NOTFOUND THEN
     ERROR "NO EXISTE FACTOR DE CONVERSION" 
     NEXT FIELD cod_n
  END IF
     
     LET movi2[p_act].descrip_esp = p_iptb02.descrip_esp CLIPPED
     LET movi2[p_act].unidad_med  = p_iptb02.unidad_med  CLIPPED

    DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp
    ATTRIBUTE(CYAN)
    DISPLAY movi2[p_act].unidad_med TO s_movi1[scr_l].unidad_med
    ATTRIBUTE(CYAN)
 
    LET ant_art.cod_n = movi2[p_act].cod_n
    LET ant_art.cod_grupo = movi2[p_act].cod_grupo 
    LET ant_art.cod_tipo = movi2[p_act].cod_tipo 
    LET ant_art.cod_sec = movi2[p_act].cod_sec   

    FOR idx = 1 TO arr_count()
        IF idx != p_act THEN
           IF movi2[idx].cod_n = ant_art.cod_n AND
              movi2[idx].cod_grupo = ant_art.cod_grupo AND 
              movi2[idx].cod_tipo = ant_art.cod_tipo AND
              movi2[idx].cod_sec = ant_art.cod_sec THEN 
              LET numero_msg = 21
              CALL msg(numero_msg)
              NEXT FIELD cod_n
           END IF
        END IF
    END FOR
    END IF

    AFTER FIELD cantidad_1
      LET p_act = arr_curr()

   IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
      movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null 
   THEN

     IF movi2[p_act].cantidad_1 IS NULL THEN
        LET numero_msg = 16
        CALL msg(numero_msg)
        NEXT FIELD cantidad_1
     END IF

     LET movi2[p_act].cantidad_2=movi2[p_act].cantidad_1*factor_conv[p_act]
     DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 
     LET p_iptb06.cantidad_2 = 0

    IF status_m = "2" THEN
# BUSCA LA EXISTENCIA
       SELECT SUM(a.cantidad_2) INTO p_iptb06.cantidad_2 FROM iptb00006 a
       WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo 
         and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec
         and a.status_t IS NULL

      IF p_iptb06.cantidad_2 IS NULL THEN
         LET p_iptb06.cantidad_2 = 0
      END IF

      IF movi2[p_act].cantidad_2 > p_iptb06.cantidad_2 THEN
         LET numero_msg = 30
         CALL msg(numero_msg)
         NEXT FIELD cantidad_2
      END IF
   END IF
     LET movi3[p_act].cantidad_2 = movi2[p_act].cantidad_2 
   END IF

    AFTER INPUT

      IF int_flag THEN
         LET numero_msg = 2
         CALL msg(numero_msg)
         LET int_flag = false
         RETURN
      END IF
  END INPUT

   LABEL sale_boni:
    PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc

 IF OPC = "S" or OPC = "s" THEN
    # Actualiza tabla control ultimo documento
      SELECT num_doc INTO otros_mov.num_doc FROM iptb00007
       WHERE cod_mov = otros_mov.cod_mov

     IF status   = notfound THEN
        LET otros_mov.num_doc = 0
        INSERT INTO iptb00007 values(1,otros_mov.cod_mov,null,user,current,null,null)
     END IF

     LET otros_mov.num_doc = otros_mov.num_doc + 1

     UPDATE iptb00007 set num_doc    = otros_mov.num_doc,
                          us_crea    = user,
                          fech_crea = current
     WHERE cod_mov = otros_mov.cod_mov

     DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE (BLUE)
     
  FOR idx = 1 TO arr_count()
    IF movi2[idx].cod_n is not null and movi2[idx].cod_grupo is not null and
       movi2[idx].cod_tipo is not null and movi2[idx].cod_sec is not null THEN
       
       IF movi2[idx].cantidad_2 is not null THEN

       IF status_m = "2" THEN
          LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1
       END IF

       INSERT INTO iptb00006 VALUES
                 (otros_mov.cod_cia,otros_mov.num_doc,otros_mov.fecha,
                  otros_mov.fact_no,otros_mov.conduce_no,null,null,otros_mov.cod_sp,
                  otros_mov.cod_sp_sec,otros_mov.cod_transp,
                  otros_mov.sec_transp,otros_mov.placa,otros_mov.cod_tarifa,
                  otros_mov.cod_mov,otros_mov.detalle,movi2[idx].cod_n, 
                  movi2[idx].cod_grupo,
                  movi2[idx].cod_tipo,movi2[idx].cod_sec,
                  movi2[idx].cantidad_1,movi2[idx].cantidad_2,
                  null,null,otros_mov.bodega,null,user,current,null,null)

          CALL integridad()          

         if bandera = 1 THEN
           LET bandera = 0
           RETURN
         end if 

       END IF { if de cantidad_2 no NULL }
    END IF {if cod_n cod_tipo ........ is not null }
  END FOR
   #-> Actualiza la tabla de monitoreo de las ordenes de corte vg. Saturday, 03 March, 2001 10:51:42 AM
       IF otros_mov.cod_mov = 20 THEN
           LET prtb09.detalle = "ENTRADA DE PRODUCCION A ALMACEN # ",otros_mov.num_doc USING "<<<<<<<",
                                " DE FECHA : ",otros_mov.fecha USING "dd/mm/yyyy"
          INSERT INTO prtb00009 
          VALUES (ordenx,otros_mov.fecha,"S",prtb09.detalle,NULL,USER,CURRENT,NULL,NULL)
       END IF
  DISPLAY " "

    PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2

       IF opt2 = "S" OR opt2 = "s" THEN
            START REPORT formu4 TO "C:\\archivo"
         LET ya = null
         FOR idx = 1 TO arr_count()
             IF movi2[idx].cod_sec IS NOT NULL THEN
                OUTPUT TO REPORT formu4(otros_mov.*,movi2[idx].*)
            END IF
       END FOR

        FINISH REPORT formu4
        RUN "TYPE C:\\ARCHIVO > LPT3"
        END IF

          LET numero_msg = 1
          CALL msg(numero_msg)
        CLEAR FORM

      FOR idx = 1 to 6
      LET movi2[idx].cod_n = null
      LET movi2[idx].cod_grupo = null
      LET movi2[idx].cod_tipo = null
      LET movi2[idx].cod_sec = null
      LET movi2[idx].cantidad_2 = null
      LET movi2[idx].unidad_med = null
      LET movi2[idx].descrip_esp = null      
    DISPLAY movi2[idx].cod_n to s_movi1[idx].cod_n
    DISPLAY movi2[idx].cod_grupo to s_movi1[idx].cod_grupo
    DISPLAY movi2[idx].cod_tipo to s_movi1[idx].cod_tipo
    DISPLAY movi2[idx].cod_sec  to s_movi1[idx].cod_sec
    DISPLAY movi2[idx].descrip_esp to s_movi1[idx].descrip_esp
    DISPLAY movi2[idx].unidad_med to s_movi1[idx].unidad_med
  END FOR

      FOR idx = 1 to 20
      LET movi2[idx].cod_n = null
      LET movi2[idx].cod_grupo = null
      LET movi2[idx].cod_tipo = null
      LET movi2[idx].cod_sec = null
      LET movi2[idx].cantidad_2 = null
      LET movi2[idx].unidad_med = null
      LET movi2[idx].descrip_esp = null      
     END FOR
     ELSE
         GOTO otra_vez
   END IF
    GOTO vuelve
END FUNCTION

REPORT formu4(x,z)

DEFINE x RECORD
    num_doc       LIKE iptb00006.num_doc,
    cod_cia       LIKE iptb00006.cod_cia,
    cod_mov       LIKE iptb00006.cod_mov,
    fact_no       LIKE iptb00006.fact_no,
    cod_transp    LIKE iptb00006.cod_transp,
    sec_transp    LIKE iptb00006.sec_transp,
    cod_tarifa    LIKE iptb00006.cod_tarifa,
    placa         LIKE iptb00006.placa,
    fecha         LIKE iptb00006.fecha,
    descrip_mov   LIKE intb00005.descrip_mov,
    bodega        LIKE iptb00006.bodega,
    conduce_no    LIKE iptb00006.conduce_no,
    detalle       LIKE iptb00006.detalle,
    cod_sp       LIKE iptb00006.cod_sp,
    cod_sp_sec   LIKE iptb00006.cod_sp_sec,
    descrip4     CHAR(30)
 END RECORD

DEFINE z RECORD
    cod_n        LIKE iptb00002.cod_n,
    cod_grupo    LIKE iptb00002.cod_grupo,
    cod_tipo     LIKE iptb00002.cod_tipo,
    cod_sec      LIKE iptb00002.cod_sec,
    cantidad_1   LIKE iptb00006.cantidad_1,
    cantidad_2   LIKE iptb00006.cantidad_2,
    unidad_med   LIKE iptb00002.unidad_med,      
    descrip_esp  CHAR(40)
 END RECORD

 DEFINE usuario_c CHAR(9)
 DEFINE signo CHAR(1)
 DEFINE doce,normal,doble,doble_of,negras,negras_off CHAR(2)
 DEFINE l,cuenta SMALLINT

OUTPUT
  LEFT MARGIN 5 

ORDER BY x.num_doc,z.cod_sec
FORMAT

 BEFORE GROUP OF x.num_doc
  LET doble = ASCII 14
  LET doble_of = ASCII 20
  LET negras = ASCII 27, ASCII 69
  LET negras_off = ASCII 27, ASCII 70
SELECT unique us_crea INTO usuario_c 
FROM iptb00006 WHERE num_doc = x.num_doc and
cod_mov = x.cod_mov and
us_crea = user

      LET doce = ASCII 27, ASCII 77
      LET normal = ASCII 27, ASCII 80

      PRINT doce
      PRINT COLUMN 1, negras,doble,p_companias.nombre CLIPPED
      PRINT COLUMN 71,"No. ",doble,x.num_doc using "<<<<<<"
      LET l = (80 - LENGTH ("OTROS MOVIMIENTOS")) / 2
      PRINT COLUMN l, "OTROS MOVIMIENTOS",
            COLUMN 71, x.fecha using "dd/mm/yyyy"

      SKIP 1 LINES
       
      LET l = (80 - LENGTH (x.descrip_mov)) / 2

      PRINT COLUMN l-2, "(",x.cod_mov using "&&",") ",x.descrip_mov,negras_off
      PRINT COLUMN 1, "Factura No: ",x.fact_no using "&&&&&&"

      IF x.detalle is null THEN
         LET x.detalle = "**************************************"
      END IF

      PRINT COLUMN 1, "Detalle : ", x.detalle
      PRINT COLUMN 1, "Cliente : ", x.cod_sp using "&&","-",
                                    x.cod_sp_sec using "&&&&"," ",
                                    x.descrip4
     SKIP 1 LINES
        PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"--------------"

        PRINT COLUMN 2,doble, "PRODUCTO",doble_of clipped,
              COLUMN 76, "UNIDADES"

        PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-------------"
     SKIP 1 LINES

     ON EVERY ROW
      IF z.cod_n is not null and z.cod_grupo is not null and
         z.cod_tipo is not null and z.cod_sec is not null THEN
         PRINT COLUMN 2, z.cod_n using "&","-",
               COLUMN 4, z.cod_grupo using "&","-",
               COLUMN 6, z.cod_tipo using "&&","-",
               COLUMN 9, z.cod_sec using "&&&",
               COLUMN 17, z.descrip_esp clipped," ",z.unidad_med CLIPPED;

         IF cuenta = 1 THEN
            LET signo = "+"
         ELSE
            LET signo = "-"
            LET z.cantidad_2 = z.cantidad_2 * -1
         END IF

       PRINT  COLUMN 75, signo, z.cantidad_2 using "#,###,###.##"
      END IF

PAGE TRAILER
  PRINT COLUMN 1,  "------------------",
        COLUMN 22, "------------------",
        COLUMN 45, "------------------",
        COLUMN 65, "------------------"

  PRINT COLUMN 5, "Entregado Por",
        COLUMN 24, "Recibido Por",
        COLUMN 48, "Aprobado Por",
        COLUMN 68, "Aprobado Por"

  PRINT COLUMN  2, 
  "Original: Contabilidad    Copia: Vendedor    Copia: Ventas    Copia: Almacen"

  PRINT normal
END REPORT

FUNCTION busca_vend()

 DEFINE arr_vend ARRAY[200] OF RECORD
   sec_cliente    INTEGER,
   num_emp        INTEGER,
   nombre         CHAR(30)
 END RECORD

OPEN WINDOW busca_1 AT 8,4 WITH FORM "ipfmwd004" ATTRIBUTE (BORDER,FORM LINE
FIRST + 1,PROMPT LINE LAST)

 DECLARE busca_1 CURSOR FOR
  SELECT a.sec_cliente,a.num_emp,b.nombre FROM vetb00033 a,vetb00004 b
  WHERE a.sec_cliente = b.sec_cliente AND a.status_t IS NULL AND
        b.status_t IS NULL
  ORDER BY 1

  LET idx = 1
  FOREACH busca_1 INTO arr_vend[idx].*
   LET idx = idx + 1
  END FOREACH
  CALL SET_COUNT(idx - 1)
 
   DISPLAY ARRAY arr_vend TO sc_vend.*
   LET idx = ARR_CURR()

   LET busca_v.sec_cliente = arr_vend[idx].sec_cliente
   LET busca_v.nombre      = arr_vend[idx].nombre     

  CLOSE WINDOW busca_1
END FUNCTION

FUNCTION busca_prod1()

 DEFINE arr_prod ARRAY[500] OF RECORD
   cod_n          INTEGER,
   cod_grupo      INTEGER,
   cod_tipo       INTEGER,
   cod_sec        INTEGER,
   descrip_esp    CHAR(30),
   unidad_med     CHAR(5)
 END RECORD

OPEN WINDOW busca_2 AT 8,4 WITH FORM "ipfmwd001" ATTRIBUTE (BORDER,FORM LINE
FIRST + 1,PROMPT LINE LAST)

  CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
                   FROM cod_n,cod_grupo,cod_tipo,cod_sec

  LET selec_pt =
  "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
  "       a.unidad_med FROM iptb00002 a ",
  "WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 5 " 

  PREPARE comando_p FROM selec_pt
  DECLARE busca_2 CURSOR FOR comando_p

  LET idx = 1
  FOREACH busca_2 INTO arr_prod[idx].*
   LET idx = idx + 1
  END FOREACH
  CALL SET_COUNT(idx - 1)
 
   DISPLAY ARRAY arr_prod TO s_prod.*
   LET idx = ARR_CURR()

   LET busca_p.cod_n       = arr_prod[idx].cod_n
   LET busca_p.cod_grupo   = arr_prod[idx].cod_grupo
   LET busca_p.cod_tipo    = arr_prod[idx].cod_tipo
   LET busca_p.cod_sec     = arr_prod[idx].cod_sec
   LET busca_p.descrip_esp = arr_prod[idx].descrip_esp
   LET busca_p.unidad_med  = arr_prod[idx].unidad_med 

   CLOSE WINDOW busca_2
 END FUNCTION
